 1.基本数据类型及转换
    
   Hive类似和java语言中一样，会支持多种不同长度的整型和浮点类型数据，同时也支
持布尔类型、字符串类型，时间戳数据类型以及二进制数组数据类型等。具体的如下
表：
   
    大类                  类型
  Integers(整型)      TINYINT-- 1字节的有符号整数
                      SMALLINT -- 2字节的有符号整数
                      INT -- 4字节的有符号整数
                      BIGINT -- 8字节的有符号整数
  Floating point      FLOAT -- 单精度浮点数
  numbers(浮点数)     DOUBLE -- 双精度浮点数
  Fixed point         DECIMAL -- 17字节，任意精度数字。
  numbers(定点数)     通常用户自定义decimal(12, 6)
  String(字符串)      STRING -- 可指定字符集的不定长字符串
                      VARCHAR -- 1-65535长度的不定长字符串
                      CHAR -- 1-255定长字符串
  Datetime(时间日     TIMESTAMP -- 时间戳（纳秒精度）
  期类型)             DATE -- 时间日期类型
  Boolean(布尔类型)   BOOLEAN -- TRUE / FALSE
  Binary types(二进   BINARY -- 字节序列
  制类型)
  这些类型名称都是 Hive 中保留字。这些基本的数据类型都是 java 中的接口进行实现
的，因此与 java 中数据类型是基本一致的：
  Hive数据类型    Java数据类型    长度          样例
   TINYINT                   1byte有符号整数     20
   SMALLINT                  2byte有符号整数     30
    INT                      4byte有符号整数     40
   BIGINT                    8byte有符号整数     50
   BOOLEAN                     布尔类型       TURE / FALSE
    FLOAT                     单精度浮点数     3.14159
   DOUBLE                     双精度浮点数     3.14159
   STRING                    字符系列，可指定  'The Apache Hive data
                              字符集；可使用单  warehouse software
                               引号或双引号      facilitates' 
  TIMESTAMP                     时间类型
   BINARY                       字节数组
  
 2.数据类型的隐式转换
   
   Hive的数据类型是可以进行隐式转换的，类似于Java的类型转换。如用户在查询中将
一种浮点类型和另一种浮点类型的值做对比，Hive会将类型转换成两个浮点类型中值
较大的那个类型，即：将FLOAT类型转换成DOUBLE类型；当然如果需要的话，任意
整型会转化成DOUBLE类型。 Hive 中基本数据类型遵循以下层次结构，按照这个层
次结构，子类型到祖先类型允许隐式转换。
 总的来说数据转换遵循一下规律:
 任何整数类型都可以隐式转换为一个范围更广的类型tinyint=>int; int=>bigint;
 所有整数类型、float、string(都是数字)都可以隐式转换为Double;
 tinyint、smallint、int=>float
 boolean 不能转换
 hive> select '1.0'+2;
 OK
 3.0
 hive> select '1111' > 10;
 hive> select 1 > 0.8; 
 使用cast函数进行强制类型转换；如果强制类型转换失败，返回NULL
 hive> select cast('1111s' as int);
  OK
  NULL
  hive> select cast('1111' as int);
  OK
  1111
  
 3.集合数据类型
    
   Hive支持集合数据类型，包括array、map、struct、union
   类型
   ARRAY-- 有序的相同数据类型的集合-- array(1,2)
   MAP -- key-value对。key必须是基本数据类型，value不限 -- map('a', 1, 'b',2)
   STRUCT -- 不同类型字段的集合。类似于C语言的结构体 
   --  struct('1',1,1.0), named_struct('col1', '1', 'col2', 1, 'clo3', 1.0)  
   UNION -- 不同类型的元素存储在同一字段的不同行中 -- create_union(1, 'a', 63)
   和基本数据类型一样，这些类型的名称同样是保留字；
   ARRAY 和 MAP 与 Java 中的 Array 和 Map 类似；
   STRUCT 与 C 语言中的 Struct 类似，它封装了一个命名字段集合，复杂数据类型允
   许任意层次的嵌套；   
   hive> select array(1,2,3);-- OK [1,2,3]
   
   -- 使用 [] 访问数组元素
   hive> select arr[0] from (select array(1,2,3) arr) tmp;
   
   hive> select map('a', 1, 'b', 2, 'c', 3); -- ok {"a":1,"b":2,"c":3}
   
   -- 使用 [] 访问map元素
   hive> select mymap["a"] from (select map('a', 1, 'b', 2, 'c',3) as mymap) tmp;
   
   -- -- 使用 [] 访问map元素。 key 不存在返回 NULL
   hive> select mymap["x"] from (select map('a', 1, 'b', 2, 'c', 3) as mymap) tmp;
   NULL
   
   hive> select struct('username1', 7, 1288.68);  -- OK
   {"col1":"username1","col2":7,"col3":1288.68}
   
   -- 给 struct 中的字段命名
   hive> select named_struct("name", "username1", "id", 7, "salary", 12880.68); -- OK
   {"name":"username1","id":7,"salary":12880.68}
   
   -- 使用 列名.字段名 访问具体信息
   hive> select userinfo.id from (select named_struct("name", "username1", "id",
    7, "salary", 12880.68) userinfo) tmp;
	
	-- union 数据类型
    hive> select create_union(0, "zhansan", 19, 8000.88) uinfo;
    